package com.wpf.system.entity;

import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.*;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.security.core.GrantedAuthority;

/**
 * 用户信息表
 * @TableName user
 */
@TableName(value ="user")
@Data
public class User implements Serializable{
    /**
     * 主键
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 学号/工号
     */
    @ExcelProperty("学号/工号")
    private String nid;

    /**
     * 用户姓名
     */
    @ExcelProperty("姓名")
    private String username;

    /**
     * 用户昵称
     */
    private String nickname;

    /**
     * 用户性别（1：男；0：女；null：未知）
     */
    @ExcelProperty("性别")
    @TableField(updateStrategy = FieldStrategy.IGNORED)
    private Integer sex;

    /**
     * 用户年龄
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @ExcelProperty("出生日期")
    private Date birthdate;

    /**
     * 用户身高cm
     */
    @ExcelProperty("身高(cm)")
    private Integer height;

    /**
     * 用户体重kg
     */
    @ExcelProperty("体重(kg)")
    private Integer weight;

    /**
     * 用户兴趣爱好
     */
    @TableField(updateStrategy = FieldStrategy.IGNORED)
    private String hobbies;

    /**
     * 用户简介
     */
    private String remark;

    /**
     * 用户头像地址
     */
    private String avatar;

    /**
     * 用户电话号码
     */
    @ExcelProperty("电话号码")
    private String phone;

    /**
     * 用户邮箱
     */
    @ExcelProperty("电子邮箱")
    private String email;

    /**
     * 邮箱绑定与否（1：已绑定；0：未绑定）
     */
    private Integer checkEmail;

    /**
     * 用户密码
     */
    private String password;

    /**
     * 密码强度
     */
    private Integer checkPassword;

    /**
     * 资产主键
     */
    private Long assetId;

    /**
     * 部门主键
     */
    @ExcelProperty("所属组织")
    private Long deptId;

    /**
     * 用户状态（1：正常；0：停用）
     */
    private Integer status;

    /**
     * 用户最后登录时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date loginTime;

    /**
     * 最后修改用户信息时间
     */
    @TableField(fill = FieldFill.UPDATE)
    private Date updateTime;

    /**
     * 创建用户时间
     */
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    /**
     * 逻辑删除标识（1：已删除；0：未删除）
     */
    @TableLogic
    private Integer isDelete;

    /**
     * 版本号
     */
    @Version
    private Long version;

    /**
     * 用户权限字段
     */
    @TableField(exist = false)
    private Collection<? extends GrantedAuthority> authorities;

    /**
     * 用户权限列表
     */
    @TableField(exist = false)
    List<Menu> permissionList;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}